﻿using System;
using System.Collections.Concurrent;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;

namespace rabbitmqTest
{
    internal class Program
    {
        static void Main(string[] args)
        {
            // 初始化客户端
            var client = new RabbitMQBatchClient();
            client.Connect();
            client.EnableConfirmMode(); // 启用发布确认模式

            // 批量发送优化（使用内存流预生成）
            var messages = Enumerable.Range(0, 10000)
                .Select(i => Encoding.UTF8.GetBytes($"topic{i} : {i}"))
                .ToList();

            client.HighPerfPublish("", "test", messages);       // 调整批量大小

            // 在调用处添加字典和数据处理
            var dataMap = new ConcurrentDictionary<int, int>();

            client.StartBatchConsume("test", onBatchReceived: batch =>
            {
                foreach (var msg in batch) 
                {
                    try
                    {
                        // 解析消息体
                       var message = Encoding.UTF8.GetString(msg.Body.Span.ToArray()); // 添加 ToArray() 转换
                        var parts = message.Split(new[] { " : " }, StringSplitOptions.RemoveEmptyEntries);

                        if (parts.Length == 2 &&
                            int.TryParse(parts[0].Replace("topic", ""), out var key) &&
                            int.TryParse(parts[1], out var value))
                        {
                            dataMap[key] = value;
                        }
                    }
                    catch (Exception ex)
                    {
                        Console.WriteLine($"消息解析失败: {ex.Message}");
                    }
                }

                // 打印当前字典统计
                Console.WriteLine($"已收集 {dataMap.Count} 条有效数据");
            });

         }
    }
}
